/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.clinicariobamba.ReglasNegocio.Funciones;

import com.clinicariobamba.Accesodatos.Conexion;
import com.clinicariobamba.ReglasNegocio.Clases.EstadoCivil;
import com.clinicariobamba.ReglasNegocio.Clases.Etnia;
import com.clinicariobamba.ReglasNegocio.Clases.Paciente;
import java.sql.ResultSet;
import java.util.ArrayList;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

/**
 *
 * @author Gis
 */
public class FuncionesPaciente {

    public static ArrayList<Paciente> obtenerPacientes() {
        try {
            Conexion con = new Conexion();
            ArrayList<Paciente> list = new ArrayList();

            try {
                String sql = "select * from paciente";
                ResultSet rs = con.ejecutarQuery(sql);

                while (rs.next()) {
                    list.add(new Paciente(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6), new EstadoCivil(rs.getString(7)), new Etnia(rs.getString(8)), rs.getString(9), rs.getString(10), rs.getString(11), rs.getString(12), rs.getString(13), rs.getString(14), rs.getString(15), rs.getString(16), rs.getBoolean(17)));
                }
            } catch (Exception e) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                        "Error de consulta de datos de Etnia", e.getMessage());
                FacesContext.getCurrentInstance().addMessage(null, message);
            }
            con.desconectar();
            return list;
        } catch (Exception ex) {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Error en la conexion a la base de datos", ex.getMessage());
            FacesContext.getCurrentInstance().addMessage(null, message);
            return new ArrayList();
        }
    }

    public static Paciente obtenerPaciente(int id) {
        try {
            Conexion con = new Conexion();
            Paciente paciente = new Paciente();
            try {
                String sql = String.format("select * from paciente where id_p = %d ", id);
                ResultSet rs = con.ejecutarQuery(sql);
                while (rs.next()) {
                    paciente = new Paciente(id, rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6), new EstadoCivil(rs.getString(7)), new Etnia(rs.getString(8)), rs.getString(9), rs.getString(10), rs.getString(11), rs.getString(12), rs.getString(13), rs.getString(14), rs.getString(15), rs.getString(16), rs.getBoolean(17));
                }
            } catch (Exception e) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                        "Error de consulta de datos de la Dependencia", e.getMessage());
                FacesContext.getCurrentInstance().addMessage(null, message);
            }
            con.desconectar();
            return paciente;
        } catch (Exception ex) {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Error en la conexion a la base de datos", ex.getMessage());
            FacesContext.getCurrentInstance().addMessage(null, message);
            return new Paciente();
        }
    }

    public static ArrayList<Paciente> obtenerPacienteConectado() {
        try {
            Conexion con = new Conexion();
            ArrayList<Paciente> paciente = new ArrayList<Paciente>();
            try {
                String sql = String.format("select * from paciente where estado = %B ", true);
                ResultSet rs = con.ejecutarQuery(sql);
                while (rs.next()) {
                    paciente.add(new Paciente(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6), new EstadoCivil(rs.getString(7)), new Etnia(rs.getString(8)), rs.getString(9), rs.getString(10), rs.getString(11), rs.getString(12), rs.getString(13), rs.getString(14), rs.getString(15), rs.getString(16), rs.getBoolean(17)));
                }
            } catch (Exception e) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                        "Error de consulta de datos de la Dependencia", e.getMessage());
                FacesContext.getCurrentInstance().addMessage(null, message);
            }
            con.desconectar();
            return paciente;
        } catch (Exception ex) {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Error en la conexion a la base de datos", ex.getMessage());
            FacesContext.getCurrentInstance().addMessage(null, message);
            return new ArrayList<Paciente>();
        
        }
    }

    public static Paciente obtenerPacienteCI(String cedula) {
        try {
            Conexion con = new Conexion();
            Paciente paciente = new Paciente();
            try {
                String sql = String.format("select * from paciente where `ci` = %s ", cedula);
                ResultSet rs = con.ejecutarQuery(sql);
                while (rs.next()) {
                    paciente = new Paciente(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6), new EstadoCivil(rs.getString(7)), new Etnia(rs.getString(8)), rs.getString(9), rs.getString(10), rs.getString(11), rs.getString(12), rs.getString(13), rs.getString(14), rs.getString(15), rs.getString(16), rs.getBoolean(17));
                }
            } catch (Exception e) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                        "Error de consulta de datos de la Dependencia", e.getMessage());
                FacesContext.getCurrentInstance().addMessage(null, message);
            }
            con.desconectar();
            return paciente;
        } catch (Exception ex) {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Error en la conexion a la base de datos", ex.getMessage());
            FacesContext.getCurrentInstance().addMessage(null, message);
            return new Paciente();
        }
    }

    public static boolean insertar(Paciente paciente) throws Exception {
        boolean resultado;
        resultado = false;
        Conexion con;
        try {
            paciente.setEstado(false);
            if (paciente.getContrasena() == null) {
                paciente.setContrasena(paciente.getCi());
            }
            String sql = String.format("select `clinica riobamba`.`insertar_paciente`('%s','%s','%s','%s','%s',%d,%d,'%s','%s','%s','%s','%s','%s','%s','%s',%B)", paciente.getCi(), paciente.getNombres(), paciente.getApellidos(), paciente.getSexo(), paciente.getFechaNac(), paciente.getEstadoCivil().getIdEstC(), paciente.getEtnia().getIdEtnia(), paciente.getReligion(), paciente.getLateralidad(), paciente.getLugarNacimiento(), paciente.getLugarResidencia(), paciente.getDireccion(), paciente.getTelefono(), paciente.getProfesion(), paciente.getContrasena(), paciente.getEstado());
            con = new Conexion();
            ResultSet rs = con.ejecutarQuery(sql);
//            rs.next();
//            resultado = rs.getBoolean(1);
            while (rs.next()) {
                paciente.setId_p(rs.getInt(1));
                resultado = true;
            }
            con.desconectar();
        } catch (Exception ex) {
            throw ex;
        }
        return resultado;
    }

    public static boolean modificar(Paciente paciente) throws Exception {
        boolean resultado;
        resultado = false;
        Conexion con;
        try {
            String sql;
            paciente.getFechaNac();
            sql = String.format("select `clinica riobamba`.`actualizar_paciente`(%d,'%s','%s','%s','%s','%s','%s',%d,%d,'%s','%s','%s','%s','%s','%s','%s','%s')", paciente.getId_p(), paciente.getCi(), paciente.getCiNueva(), paciente.getNombres(), paciente.getApellidos(), paciente.getSexo(), paciente.getFechaNac(), Integer.parseInt(paciente.getEstadoCivil().getDescripcion()), Integer.parseInt(paciente.getEtnia().getDescripcion()), paciente.getReligion(), paciente.getLateralidad(), paciente.getLugarNacimiento(), paciente.getLugarResidencia(), paciente.getDireccion(), paciente.getTelefono(), paciente.getProfesion(), paciente.getContrasena());
            con = new Conexion();
            ResultSet rs = con.ejecutarQuery(sql);
            rs.next();
            resultado = rs.getBoolean(1);
            con.desconectar();
        } catch (Exception ex) {
            throw ex;
        }
        return resultado;
    }

}
